#include <stdio.h>
#include <stdlib.h>
#include "stack.h"

Status rewrite_clear_stack(SqStack *stack) // 重写clear_stack函数的功能
{
    while (stack->top != stack->base)
    {
        stack->top--;
    }
    return OK;
}

Status show_and_clear_stack(SqStack *stack)
{
    while (stack->top != stack->base)
    {
        putchar(*stack->top);
        stack->top--;
    }
    return OK;
}

int main()
{
    // 行编译程序
    // 符号说明('#'为退格符,'@'为退行符号)
    // 测试数据:whli##ilr#e(s#*s)
    SqStack *stack = (SqStack *)malloc(sizeof(SqStack));
    InitStack(stack);
    char ch = getchar();
    SElemType *e = (SElemType *)malloc(sizeof(SElemType));
    while (ch != EOF) // 全文未结束
    {
        while (ch != EOF && ch != '\n')
        {
            switch (ch)
            {
            case '#': // 退格
                pop(stack, e);
                break;
            case '@': // 退行
                rewrite_clear_stack(stack);
                break;
            default:
                push(stack, ch); // 无错误
                break;
            }
            ch = getchar();
        }
        if (ch != EOF) // 如果全文未结束
        {
            ch = getchar();
        }
    }
    // 此处应写将字符串输入终端的功能(模拟)
    show_and_clear_stack(stack); // 输出是逆序的    //清空栈
    return 0;
}